Asset Scan Payload Reference
This page summarizes the payload structure for quick reference. The Asset Scan Ingest API spec is the authoritative source — if anything conflicts, the spec wins.
Top-level fields
| Field | Type | Required | Notes |
|---|---|---|---|
timestamp | integer | Yes | Unix epoch seconds |
mpbid | string | Yes | 5-byte hex (10 chars), 0x prefix accepted |
location | object | Yes | At least one of gnssFix or lteInfo |
xAds | object | Yes | Must contain a non-empty data array |
sessionId | integer | No | Scan session identifier |
dryRun | boolean | No | If true, skips Tool Location Services submission (testing only) |
Location
Provide at least one location source. GNSS is preferred; the backend uses LTE cell tower positioning as a fallback if no GNSS fix is present.
GNSS fix (location.gnssFix):
| Field | Type | Required | Notes |
|---|---|---|---|
lat | number | Yes | Magnitude only — non-negative |
latDir | string | Yes | "N" or "S" |
lon | number | Yes | Magnitude only — non-negative |
lonDir | string | Yes | "E" or "W" |
fixQuality | integer | No | GPS quality indicator |
satellites | integer | No | Number of satellites in use |
hDop | number | No | Horizontal dilution of precision |
altitudeMsl | number | No | Altitude above mean sea level (meters) |
Coordinates use magnitude + direction, not signed decimal degrees. lat: 43.05, latDir: "N" is valid. lat: -43.05 is not — negative latitudes will fail validation.
LTE towers (location.lteInfo.lte — array):
| Field | Type | Required | Notes |
|---|---|---|---|
mcc | integer | Yes | Mobile Country Code |
mnc | integer | Yes | Mobile Network Code |
eutranCid | integer | Yes | E-UTRAN Cell Identifier |
tac | integer | No | Tracking Area Code |
rsrp | number | No | Reference Signal Received Power (dBm) |
rsrq | number | No | Reference Signal Received Quality (dB) |
BLE Advertisements (xAds.data — array)
Each entry represents one scanned device:
| Field | Type | Required | Notes |
|---|---|---|---|
xAd | string | Yes | Raw BLE advertisement, hex-encoded, max 62 chars (31 bytes) |
timeSeen | integer | Yes | Unix epoch seconds when the advertisement was captured |
rssi | integer | Yes | Received signal strength in dBm |
mac | string | No | BLE MAC address of the scanned device |
The backend parses each xAd to extract the Milwaukee manufacturer payload (company code 0x0165) and tool MPBID. Advertisements that are oversized, contain invalid hex, or don't carry a recognized Milwaukee payload are skipped silently — they don't fail the entire message.
Example
{
"timestamp": 1705312200,
"mpbid": "0191000001",
"location": {
"gnssFix": {
"lat": 43.0451,
"latDir": "N",
"lon": 87.9099,
"lonDir": "W",
"fixQuality": 3,
"satellites": 6,
"hDop": 1.58
}
},
"xAds": {
"data": [
{
"xAd": "0201060303F5FD17FF650101840000...",
"timeSeen": 1705312195,
"rssi": -78,
"mac": "AA:BB:CC:DD:EE:FF"
}
]
}
}